package com.pig4cloud.pigx.common.customize.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 通用字典枚举类
 *
 * @date 2022/8/12 16:23
 */
public enum CommonDictEnum {
	;

	/**
	 * 是/否 (0否、1是)
	 */
	@Getter
	@AllArgsConstructor
	public enum YesOrNo {
		/**
		 * 0否
		 */
		NO("否", "0"),
		/**
		 * 1是
		 */
		YES("是", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (YesOrNo item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (YesOrNo item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}


	/**
	 * 状态 （0启用、1停用）
	 */
	@Getter
	@AllArgsConstructor
	public enum Status {
		/**
		 * 0停用
		 */
		DEPRECATED("停用", "0"),
		/**
		 * 1启用
		 */
		NORMAL("启用", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Status item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Status item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 是否删除 （0否、null是）
	 */
	@Getter
	@AllArgsConstructor
	public enum IsDeleted {
		/**
		 * 0否
		 */
		NO("否", "0"),
		/**
		 * null是
		 */
		YES("是", null);

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (IsDeleted item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (IsDeleted item : values()) {
				if (item.getValue() == null) {
					if (value == null) {
						return item.getName();
					}

				} else if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 计算类型（0加、1减、2乘、3除）
	 */
	@Getter
	@AllArgsConstructor
	public enum CalculationType {
		ADD("加", "0"),
		MINUS("减", "1"),
		MULTIPLY("乘", "2"),
		DIVIDE("除", "3");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (CalculationType item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 * @author gong_da_kai
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (CalculationType item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}
}
